2
תגובות

PHP Enumerations

פתח Elad65 ,
איך אפשר לדמות שימוש ב-Enum ב-PHP?
מה השיטה הכי טובה?

2 תשובות

avatar ענה intval ב 30 לאפריל 2013 #

א. על ידי מחלקות
- לא יעיל כל כך מבחינת משאבים

interface IEnumConstraint {}
class Value1 implements IEnumConstraint {}
class Value2 implements IEnumConstraint {}

class Constrained
{
  public function(IEnumConstraint $value) {}
}


ב. על ידי קונסטנטות של מחלקות
- מעבד את ההגבלה של רק ערכים מסוימים
class Constrained
{
  const VALUE1 = 23554245;
  const VALUE2 = 456345289;
  public function($value) {}
}



ג. על ידי הרחבה חיצונית שנקראת spl enum
- לא פרוטבילי ויעבוד רק על שרתים שבהם מותקנת ההרחבה
http://php.net/manual/en/class.splenum.php
class IEnumFruit extends SplEnum
{
  const __default = 1; // default value
  const APPLE     = 1;
  const ORANGE    = 2;
}


class Constrained
{
  function eat(Fruit $aFruit)
  {
      if (Fruit::APPLE == $aFruit)
    ...
  }
}

avatar ענה dekelyi ב 30 לאפריל 2013 #

יש המון שיטות
השיטה שלי היא:

define('ENUM_HEY','ENUM_HEY');
define('ENUM_BYE','ENUM_BYE');

בעצם אני מגדיר קבוע שהשם שלו מורכב משם ה-ENUM ושם המפתח, והערך שלו שווה לשם הקבוע.
לרוב אני עושה פונקציה שעושה את זה במקומי.
function enum($name, array $keys) {
  if (!is_string($name)) return false;
  foreach ($keys as $key => $value) {
    $value = $name.'_'.$value;
    define($value,$value,true);
  }
}

enum('enum',['hey','bye'])